/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
// 20:00 22/05 scritto Giocatore DAO

package fanta.framework.dao;

import fanta.framework.manager.ConnectionManager;
import fanta.framework.persistence.Giocatore;
import java.util.ArrayList;
import java.util.Collection;
import javax.persistence.EntityManager;
import org.apache.log4j.Logger;


/**
 *
 * @author Raizer
 */
public class GiocatoreDAO {
   private static final Logger logger = Logger.getLogger(UtenteDAO.class);
   private static Giocatore creaGiocatore (String nome, String cognome, String ruolo, String squadra, ConnectionManager cm){
       Giocatore ut = new Giocatore();
       EntityManager entityManager = (EntityManager) cm.getEntityManager();
        try {
            entityManager.getTransaction().begin();
            logger.debug("Start Transaction");
            ut.setNome(nome);
            ut.setCognome(cognome);
            ut.setRuolo(ruolo);
            ut.setSquadra(squadra);
            entityManager.persist(ut);
            logger.debug("Transaction persisted");
            entityManager.getTransaction().commit();
            logger.debug("Transaction committed");
            logger.info("Nuovo giocatore:"+ut);

        } catch (Exception e) {
            logger.error("Errore in GiocatoreDAO", e);
            logger.debug("##EXCEPTION## Transaction will be roll back");
            entityManager.getTransaction().rollback();
            logger.debug("Transaction rolled back!");
        }
        return ut;
    }
   public static boolean aggiornaGiocatore(Giocatore giocatore, ConnectionManager cm) {
        boolean result = false;
            EntityManager entityManager = (EntityManager) cm.getEntityManager();
        try {
            entityManager.getTransaction().begin();
            logger.debug("Start Transaction");
            entityManager.persist(entityManager.merge(giocatore));
            logger.debug("Transaction persisted");
            entityManager.getTransaction().commit();
            logger.debug("Transaction committed");
            result = true;
        } catch (Exception e) {
            logger.error("Errore in aggiornaGiocatoreDAO", e);
            logger.debug("##EXCEPTION## Transaction will be roll back");
            entityManager.getTransaction().rollback();
            logger.debug("Transaction rolled back!");
        }
        return result;
    }
    public static boolean cancellaGiocatore(Integer id, ConnectionManager cm) {
        boolean result = false;
        EntityManager entityManager = (EntityManager) cm.getEntityManager();
        try{
            entityManager.getTransaction().begin();
            logger.debug("Start Transaction");
            entityManager.remove(entityManager.find(Giocatore.class, id));
            entityManager.getTransaction().commit();
            logger.debug("Transaction committed");
            result = true;
        } catch (Exception e) {
            logger.error("Errore in cancellaGiocatoreDAO", e);
            logger.debug("##EXCEPTION## Transaction will be roll back");
            entityManager.getTransaction().rollback();
            logger.debug("Transaction rolled back!");
        }

        return result;
    }
    public static Giocatore cercaGiocatoreById(Integer id, ConnectionManager cm) {
        EntityManager entityManager = (EntityManager) cm.getEntityManager();
        Giocatore ut = new Giocatore();
        try {
            Object obj = entityManager.find(Giocatore.class, id);
            if(obj != null) {
                ut = (Giocatore)obj;
            }
        }catch (Exception e) {
            logger.error("Errore in CercaGiocatoreDAO", e);
        }
        return ut;
   }
    public Collection cercaGiocatoreByRuolo(String ruolo, ConnectionManager cm) {
        Collection listaGiocatori = new ArrayList<Giocatore>();
        try {
            EntityManager entityManager = (EntityManager) cm.getEntityManager();
            listaGiocatori = entityManager.createNamedQuery("Giocatore.findByRuolo").setParameter("ruolo", ruolo).getResultList();
        } catch (Exception e) {
            logger.error("#EXCEPTION# in cercaGiocatoreByRuolo!", e);
        }
        return listaGiocatori;
    }
    public Collection cercaGiocatoreByNome(String nome, ConnectionManager cm) {
        Collection listaGiocatori = new ArrayList<Giocatore>();
        try {
            EntityManager entityManager = (EntityManager) cm.getEntityManager();
            listaGiocatori = entityManager.createNamedQuery("Giocatore.findByNome").setParameter("nome", nome).getResultList();
        } catch (Exception e) {
            logger.error("#EXCEPTION# in cercaGiocatoreByNome!", e);
        }
        return listaGiocatori;

    }

    public Collection cercaGiocatoreByCognome(String cognome, ConnectionManager cm) {
        Collection listaGiocatori = new ArrayList<Giocatore>();
        try {
            EntityManager entityManager = (EntityManager) cm.getEntityManager();
            listaGiocatori = entityManager.createNamedQuery("Giocatore.findByCognome").setParameter("cognome", cognome).getResultList();
        } catch (Exception e) {
            logger.error("#EXCEPTION# in cercaGiocatoreByCognome!", e);
        }
        return listaGiocatori;
    }
    public Collection cercaGiocatoreBySquadra(String squadra, ConnectionManager cm) {
        Collection listaGiocatori = new ArrayList<Giocatore>();
        try {
            EntityManager entityManager = (EntityManager) cm.getEntityManager();
            listaGiocatori = entityManager.createNamedQuery("Giocatore.findBySquadra").setParameter("squadra", squadra).getResultList();
        } catch (Exception e) {
            logger.error("#EXCEPTION# in cercaGiocatoreBySquadra!", e);
        }
        return listaGiocatori;
    }
}
